Op deze pagina vind je een demonstratie van een statistische techniek aan de hand van een voorbeeld.
Meer informatie over hoe je deze pagina kan gebruiken vind je in deze handleiding.
De analyse gebeurt met behulp van R en RStudio. Een inleiding tot deze software vind je hier.
Referentie
Lineaire regressie is een statistische techniek die je kan gebruiken om een hypothese te toetsen over het effect van een variabele (een onafhankelijke variabele of predictor) op een andere variabele (de afhankelijke variabele of uitkomst). In lineaire regressie is die afhankelijke variabele altijd continu, dus ten minste van intervalniveau.
Zo goed als altijd zal je moeten controleren voor extra predictoren die het resultaat van de toetsing kunnen beïnvloeden.
Op deze pagina kom je te weten hoe je zo’n hypothesetoetsing kan uitvoeren in het geval dat de predictor een continue variabele is.
De dataset dataVertrouwen
bevat gegevens van 7 variabelen geobserveerd bij 1217 Belgen.
Deze dataset kan je inladen met read.csv()
. De data kan je best meteen in een object dataVertrouwen
onderbrengen zodat je die later makkelijk opnieuw kan oproepen.
dataVertrouwen <- read.csv("https://statlas.ugent.be/datasets/vertrouwen.csv")
Met str()
krijg je een opsomming van alle variabelen in de dataset. Je vindt er ook telkens bij om welk datatype het gaat. Afhankelijk van het datatype zal je sommige functies wel of juist niet kunnen gebruiken om je data te verkennen. Het heeft bijvoorbeeld geen zin om een gemiddelde te berekenen van een variabele van type chr
.
str(dataVertrouwen)
'data.frame': 1217 obs. of 7 variables:
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ vertrouwen: num 2.85 -3.74 -1.74 -2.71 0.22 ...
$ sesKind : num 0.296 4.213 0.317 0.296 4.856 ...
$ sesVolw : num -0.27 -2.33 2.48 2.48 1.09 ...
$ geslacht : chr "Man" "Man" "Vrouw" "Vrouw" ...
$ wrkls : chr "Ja" "Ja" "Nee" "Ja" ...
$ burgst : chr "nooit getrouwd" "feitelijk gescheiden" "getrouwd" "getrouwd" ...
In de output van str()
zie je inderdaad dat er 7 variabelen zijn met telkens 1217 observaties.
Je kan een model bouwen met de functie lm()
. Het eerste argument van die functie is een formule waarin je specifieert welke variabelen je in het model wil opnemen:
~
predictoren gescheiden door een +
In het tweede argument bepaal je uit welk dataframe de variabelen komen. Hier is dat dataVertrouwen
.
Zo’n model kan je in een object met een eenvoudige naam stoppen.
mijnModel <- lm(vertrouwen ~ sesKind + sesVolw + wrkls + geslacht, data = dataVertrouwen)
Hypothesetoetsing met lineaire regressie is enkel een bruikbare en betrouwbare techniek als aan een reeks voorwaarden is voldaan. Die moet je verifiëren vooraleer je met de interpretatie mag beginnen.
De Gauss-Markovassumpties en de normaliteitsassumptie van de fouten1 kan je nagaan met plot()
. Dit commando geeft je vier plots na elkaar. De eerste drie zijn relevant. In dit geval lijkt alles in orde en mag je verdergaan met de analyse.
Meer uitleg over de assumpties en deze plots vind je hier (vanaf 9.9).
plot(mijnModel)
Een laatste aandachtspunt vooraleer je tot de hypothesetoetsing kan overgaan, is collineariteit. Dat is een situatie waarbij predictoren sterk gecorreleerd zijn. Met de functie vif()
uit het R-package car
kan je te weten komen of er in jouw model een probleem is met collineariteit. Als de variance inflation factor (VIF) bij elke variabele in de buurt van 1 ligt, mag je verder met de analyse.
library(car)
vif(mijnModel)
sesKind sesVolw wrkls geslacht
1.005815 1.022536 1.026277 1.002000
Meer uitleg over collineariteit vind je hier onder 9.4.5.
Stel: je vermoedt dat iemands sociaal-economische status een invloed kan hebben op het vertrouwen in anderen.
Om de sociaal-economische status concreet te observeren stel je in een enquête een reeks vragen (o.a. naar het inkomen). Op basis daarvan stel je een continue variabele sesVolw
op die de huidige sociaal-economische status weergeeft. Dat is in dit geval de predictor.
De afhankelijke variabele is vertrouwen
. Ook deze continue variabele is gebaseerd op een reeks vragen uit een enquête.
Daarnaast controleren we voor nog andere predictoren. Dat doen we omdat de conclusie over het bestaan van een effect van sesVolw
op vertrouwen
kan afhangen van de aanwezigheid van die extra predictoren in het model. De algemene regel is: neem elke predictor op waarvan je denkt dat die een invloed heeft op de afhankelijke variabele en/of dat die gerelateerd is aan de predictor die je onderzoekt (hier sesVolw
).
De nulhypothese \(H_0\) stelt dat er geen effect is. Dit komt overeen met een regressiecoëfficiënt \(\beta_1 = 0\).
De alternatieve hypothese2 is dan \(H_a: \beta_1 \neq 0\).
Net als bij elke hypothesetoets moet je een significantieniveau kiezen. Hier kiezen we voor de veelgebruikte waarde \(\alpha = 0.05\).
Met de functie summary()
kan je heel veel relevante informatie over het model oproepen. Als argument geef je gewoon het object mijnModel
.
summary(mijnModel)
Call:
lm(formula = vertrouwen ~ sesKind + sesVolw + wrkls + geslacht,
data = dataVertrouwen)
Residuals:
Min 1Q Median 3Q Max
-5.7765 -1.5673 -0.0374 1.5510 6.8515
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.247813 0.178547 -1.388 0.1654
sesKind -0.070229 0.034594 -2.030 0.0426 *
sesVolw 0.296349 0.036793 8.054 1.9e-15 ***
wrklsNee 0.292268 0.181447 1.611 0.1075
geslachtVrouw -0.007192 0.124310 -0.058 0.9539
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.166 on 1212 degrees of freedom
Multiple R-squared: 0.06057, Adjusted R-squared: 0.05747
F-statistic: 19.54 on 4 and 1212 DF, p-value: 1.357e-15
De regressiecoëfficiënten vind je in de kolom Estimate. De relevante coëfficiënt in dit voorbeeld is 0.2963487. Op basis van de data in deze steekproef verwacht je dus een waarde voor vertrouwen
die 0.2963487 hoger ligt wanneer iemands score voor sesvolw
één eenheid hoger ligt.
De coëfficiënt die hoort bij de sociaal-economische status sesVolw
is 0.2963487. Deze waarde is niet gelijk aan nul, maar de vraag is: is deze waarde -die afkomstig is van jouw steekproef- verschillend genoeg van 0 om te concluderen dat de coëfficiënt op populatieniveau verschillend is van 0?
Deze vraag kan je beantwoorden door de p-waarde te vergelijken met het eerder gekozen significantieniveau \(\alpha\). De p-waarde vind je in de meest rechtse kolom genaamd Pr(>|t|).
In dit geval is de p-waarde gelijk aan \(1.8956034\times 10^{-15}\), met andere woorden veel kleiner dan 0.05. Je kan dus de nulhypothese verwerpen ten voordele van de alternatieve hypothese.
Je kan tot dezelfde conclusie komen op basis van het betrouwbaarheidsinterval van de regressiecoëfficiënt.
confint(mijnModel, 'sesVolw')
2.5 % 97.5 %
sesVolw 0.2241628 0.3685346
De waarde 0 ligt niet in dit interval.
Het package effects
laat je toe om eenvoudig visualisaties te maken van effecten in lineaire regressiemodellen.
install.packages('effects') # eenmalig het package installeren
library(effects) # package laden voor gebruik
plot(effect('sesVolw', mijnModel)) # let op de aanhalingstekens rond sesVolw
Mell H., Safra L., Demange P., Algan Y., Baumard N. & Chevallier C. (2021). Early life adversity is associated with diminished social trust in adults. Political Psychology. doi: 10.1111/pops.12756
De normaliteitsassumptie is hier minder van belang omwille van de steekproefgrootte en de centrale limietstelling.↩︎
De alternatieve hypothese is hier tweezijdig. Dat is vaak het geval bij lineaire regressie, maar het is ook mogelijk om een eenzijdige alternatieve hypothese op te stellen en te toetsen.↩︎